package ln.javatest.day13.demo03;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;

public class Demo01Filter {
    public static void main(String[] args) {
        File file = new File("C:\\abc");
        getAllFile(file);
    }
    public static void getAllFile(File dir){
        //传递过滤器对象可以使用匿名内部类
       /* File[] files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File file) {
                //过滤规则，file是文件夹或者是.txt结尾的文件返回true
                return file.getName().toLowerCase().endsWith(".txt") || file.isDirectory();
            }
        });*/
        //上面那段使用Lambda表达式简化为
        /*File[] files = dir.listFiles((File file)->{
            //过滤规则，file是文件夹或者是.txt结尾的文件返回true
            return file.getName().toLowerCase().endsWith(".txt") || file.isDirectory();
        });*/
       /* //再次简化Lambda表达式
        File[] files = dir.listFiles(file->file.getName().toLowerCase().endsWith(".txt") || file.isDirectory()
        );*/
        /*File[] files = dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File file, String s) {
                //过滤规则，file是文件夹或者是.txt结尾的文件返回true
                return new File(file,s).isDirectory()||s.toLowerCase().endsWith(".txt");
            }
        });*/
        //上面那段可以使用Lambda表达式简化
        /*File[] files = dir.listFiles((File file, String s)->{
            //过滤规则，file是文件夹或者是.txt结尾的文件返回true
            return new File(file,s).isDirectory()||s.toLowerCase().endsWith(".txt");
        });*/
        //再次简化Lambda表达式
        File[] files = dir.listFiles((file, s)-> new File(file,s).isDirectory()||s.toLowerCase().endsWith(".txt")
        );
        for (File fileName : files) {
            //对遍历得到的File对象进行判断是否是文件夹
            if(fileName.isDirectory()){
                //是文件夹，则继续遍历这个文件夹
                //自己本身就是遍历文件夹的，自己调用自己
                getAllFile(fileName);
            }else{
                System.out.println(fileName);
            }
        }
    }
}
